In the state of the art, SDN is an emerging network technology, which is able to simplify communication networks by decoupling a data plane from a control plane. Thereby, the control plane functions are typically provided by a SDN controller. SDN applications can be registered with the SDN controller, and may run on the SDN controller. The SDN controller may further provide service chains of multiple SDN applications, which then operate sequentially on network traffic, i.e. on at least one data flow. In a basic SDN implementation there is only a single SDN controller having one or more SDN applications registered to it and running on it. The SDN controller connects to the one or more SDN applications using a north bound interface (NBI).
However, the basic SDN implementation causes problems when it needs to be scaled. For instance, the SDN controller may need to be distributed into a cluster of a plurality of controller instances. Or a computationally intense SDN application needs to be distributed into a cluster of a plurality of application instances. Currently, the state of the art provides distribution mechanisms of SDN controller and SDN applications, which are disconnected from each other, and are not in any way coordinated.
FIG. 1a shows a first typical solution used in the state of the art, in which the SDN controller is clustered into a plurality of controller instances. However, the SDN applications are not clustered with it. Therefore, at most each of a plurality of SDN applications may run on a different controller instance. This solution makes particularly a service chaining of a plurality of applications very complex.
FIG. 1b shows a second typical solution used in the state of the art, in which an SDN application is clustered into a plurality of application instances. However, the SDN application must still use a proprietary method, and must still connect to a single controller instance of the SDN controller.
A problem with the above-described solutions used in the state of the art is, that no infrastructure is provided by the controller for application high availability. High availability is a system design approach and associated service implementation, which intends to ensure a certain level of operational performance. In particular, the term availability refers to the ability of a user to obtain a service via the network or to access the network. If the network is inaccessible or a service may not be obtained, the application is not available to the user. For high availability, the network and specifically the applications of the network need to be available at all times.